package licode.unisop.oidc.auth.utils;

public class UrlTool {
    /**
     * 在url上拼接上kv参数并返回
     *
     * @param url   url
     * @param key   参数名称
     * @param value 参数值
     * @return 拼接后的url字符串
     */
    public static String joinParam(String url, String key, Object value) {
        // 如果url或者key为空, 直接返回
        if (StringTool.isEmpty(url) || StringTool.isEmpty(key)) {
            return url;
        }
        return joinParam(url, key + "=" + value);
    }

    /**
     * 在url上拼接上kv参数并返回
     * @param url url
     * @param paramStr 参数, 例如 id=1001
     * @return 拼接后的url字符串
     */
    public static String joinParam(String url, String paramStr) {
        // 如果参数为空, 直接返回
        if(paramStr == null || paramStr.length() == 0) {
            return url;
        }
        if(url == null) {
            url = "";
        }
        int index = url.lastIndexOf('?');
        // ? 不存在
        if(index == -1) {
            return url + '?' + paramStr;
        }
        // ? 是最后一位
        if(index == url.length() - 1) {
            return url + paramStr;
        }
        // ? 是其中一位
        if(index < url.length() - 1) {
            String separatorChar = "&";
            // 如果最后一位是 不是&, 且 paramStr 第一位不是 &, 就赠送一个 &
            if(url.lastIndexOf(separatorChar) != url.length() - 1 && paramStr.indexOf(separatorChar) != 0) {
                return url + separatorChar + paramStr;
            } else {
                return url + paramStr;
            }
        }
        // 正常情况下, 代码不可能执行到此
        return url;
    }

    /**
     * 在url上拼接锚参数
     *
     * @param url      url
     * @param paramStr 参数, 例如 id=1001
     * @return 拼接后的url字符串
     */
    public static String joinSharpParam(String url, String paramStr) {
        // 如果参数为空, 直接返回
        if (paramStr == null || paramStr.length() == 0) {
            return url;
        }
        if (url == null) {
            url = "";
        }
        int index = url.lastIndexOf('#');
        // ? 不存在
        if (index == -1) {
            return url + '#' + paramStr;
        }
        // ? 是最后一位
        if (index == url.length() - 1) {
            return url + paramStr;
        }
        // ? 是其中一位
        if (index < url.length() - 1) {
            String separatorChar = "&";
            // 如果最后一位是 不是&, 且 paramStr 第一位不是 &, 就赠送一个 &
            if (url.lastIndexOf(separatorChar) != url.length() - 1 && paramStr.indexOf(separatorChar) != 0) {
                return url + separatorChar + paramStr;
            } else {
                return url + paramStr;
            }
        }
        // 正常情况下, 代码不可能执行到此
        return url;
    }

    /**
     * 在url上拼接锚参数
     *
     * @param url   url
     * @param key   参数名称
     * @param value 参数值
     * @return 拼接后的url字符串
     */
    public static String joinSharpParam(String url, String key, Object value) {
        // 如果url或者key为空, 直接返回
        if (StringTool.isEmpty(url) || StringTool.isEmpty(key)) {
            return url;
        }
        return joinSharpParam(url, key + "=" + value);
    }
}
